package com.limin.commanser.service;

import com.limin.commanser.dto.JoinLeaveDto;
import com.limin.commanser.dto.LeaveDto;
import com.limin.commanser.dto.UpdateLeaveDto;
import com.limin.commanser.entity.Leave;
import com.limin.commanser.entity.PageUtils;
import com.limin.commanser.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


public interface LeaveService {


    //    生成请假单
    public HashMap searchLeaveById(HashMap param);



    /*
     * 分页查询活动信息
     * 根据结束时间降序
     * 其他活动、招新
     * 某某社团查询
     * @param params
     * @return ActivityDto>
     */
    List<LeaveDto> findAllByPaging(Map<Object, Object> params);

    /*
     * 活动表总记录条数
     * 分别查询 其他活动 & 招新
     * @return Integer
     */
    Integer findTotal();

    /*
     * 发布活动、招新
     * @param activity
     *
     */
    void add(Leave leave);

    /*
     * 管理员: 根据ID删除活动信息
     * @param activityId
     *
     */
    void removeById(@Param("leaveId") Integer leaveId);

    /*
     * 活动发布的社团负责人可以修改活动信息
     * @param activity
     *
     */
    Integer modify(Leave leave, User user);

    /*
     * 管理员审核活动
     * @param activity
     *
     */
    void approvalLeave(Leave leave);

    /*
     * 社团管理员：
     *           发布的活动
     *           参加的活动
     *
     * 普通用户：
     *          参加的活动
     * @param user
     */
    Map<String,List<LeaveDto>> findByUser(User user, Integer leaveType);

    /*
     *统计查询某个社团有多少活动数据
     * @param []
     * @return java.util.List<com.limin.commanser.entity.News>
     */
    Integer findAllByCommunityIdStatistics(@Param("communityId") Integer communityId);

    /*
     *查询所有活动 【用于统计】
     * @param []
     * @return java.util.List<com.limin.commanser.entity.Activity>
     */
    List<Leave> findAllByStatistics();

    /*
     * 荍荍：学生请假
     * @param
     * @return
     */
    void joinLeave(JoinLeaveDto joinLeaveDto);

    /*
    *荍荍：请假约束
     */
    boolean searchContradiction(HashMap param);

    /*
     * 荍荍：分页查看学生个人的请假记录
     * @param param
     * @return PageUtils
     */
    public PageUtils searchLeaveByPage(HashMap param);

    /*
     * 荍荍：查看学生请假记录总数
     * @param param
     * @return long
     */
    public long searchLeaveCount(HashMap param);

    /*
     * 荍荍：删除学生自己的请假记录
     * @param deleteId
     * @return int
     */
    public int deleteLeaveById(Integer deleteId);

    /*
     * 荍荍：更新学生自己的请假记录
     * @param dto'
     * @return int
     */
    public int update(UpdateLeaveDto dto);
}
